package com.treasure.web.command.request.login;

import com.treasure.common.enums.LoginRouteEnum;
import com.treasure.common.enums.LoginTypeEnum;
import com.treasure.common.exception.ParameterException;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import javax.validation.constraints.NotEmpty;
import java.io.Serializable;
import java.util.Objects;

/**
 * @author sunhongmin
 * @date 2023/9/1 10:43
 * @description
 */
@Data
public class LoginRequest implements Serializable {

    // 普通用户登录校验
    public interface NormalUserLoginValiadate {
    }

    // 管理用户登录校验
    public interface AdminLoginValiadate {
    }


    /**
     * 手机号
     */
    @NotEmpty(message = "手机号不能为空", groups = {NormalUserLoginValiadate.class, AdminLoginValiadate.class})
    private String phoneNumber;
    /**
     * 企业/高校认证码
     * 生产环境，普通用户登录必须从指定入口跳转，并携带企业邀请码参数
     * 当前可固定 84298
     */
    @NotEmpty(message = "企业/高校认证码不能为空", groups = NormalUserLoginValiadate.class)
    private String invitationCode;
    /**
     * 密码/验证码
     *
     * @required
     */
    @NotEmpty(message = "密码/验证码不能为空", groups = {NormalUserLoginValiadate.class, AdminLoginValiadate.class})
    private String password;

    /**
     * 登录方式
     * code 手机号验证码；password 手机号密码；默认为手机号密码
     */
    private String loginType = LoginTypeEnum.PASSWORD_WORD.getCode();


    public void validate(LoginRouteEnum loginRouteEnum) {
        if (StringUtils.isBlank(phoneNumber)) {
            throw new ParameterException("手机号不能为空");
        }
        if (StringUtils.isBlank(password)) {
            throw new ParameterException("密码/验证码不能为空");
        }
        if (Objects.equals(loginRouteEnum, LoginRouteEnum.NORMAL_LOGIN_ROUTE) && StringUtils.isBlank(invitationCode)) {
            throw new ParameterException("认证码为空，请从特定入口跳转登录");
        }
    }
}
